/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/*
如何判断是二叉搜索树：二叉搜索树的中序遍历是有序的
如何判断是完全二叉树：
1、将root入队
2、当队不为空，将队头元素出队，将它的左右孩子入队（空也入队），
3、取出队头元素，如果不空，将它的左右孩子入队，空也入队
        如果为空，将队中元素都取出来判断，
        如果队列中有不为空的元素，说明不是完全二叉树
*/
class Solution {
public:
    /**
     * 
     * @param root TreeNode类 the root
     * @return bool布尔型vector
     */
    vector<int>vec;
    void inorder(TreeNode *root)
    {
        if(root==nullptr)
            return;
        inorder(root->left);
        vec.push_back(root->val);
        inorder(root->right);
    }
    bool judge(TreeNode *root)
    {
        queue<TreeNode*>q;
        q.push(root);
        while(!q.empty())
        {
            auto cur=q.front();
            q.pop();
            if(cur)
            {
                q.push(cur->left);
                q.push(cur->right);
            }else
            {
                while(!q.empty())
                {
                    cur=q.front();
                    if(cur)
                        return false;
                    q.pop();
                }
            }
        }
        return true;
    }
    vector<bool>ans;
    vector<bool> judgeIt(TreeNode* root) {
        // write code here
        inorder(root);
        bool flag=true;
        for(int i=1;i<vec.size();i++)
        {
            if(vec[i-1]>vec[i])
                flag=false;
        }
        ans.push_back(flag);
        ans.push_back(judge(root));
        return ans;
    }
   
};